#Configuration in CME:
#2 persons (agents), default place must be configured.

#Test t_1 - t_N should be used without router, 
#scripts submitters/queues/strategies are created dynamically

#Objects in QAARM (GUI):
#ITXServer - object of InteractionServer type, configured in QAARM
#ITXAgent1,ITXAgent2 objects of ITXAgent type, configured in QAARM,
#refer to persons above in CME
#ITXServer.MediaServerEmail, ITXServer.MediaServerChat, ITXServer.MultiChannelRouter are default names,
# not configured in QAARM




def t_1():
  """EmailServer submits itx, agent accepts, agent stop processing"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent1.StopProcessing(itx)

def t_2():
  """EmailServer submits itx, EmailServer stop processing before routing"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MediaServerEmail.StopProcessing(itx)  

def t_3():
  """EmailServer submits itx, EmailServer stop processing before agent accepts"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXServer.MediaServerEmail.StopProcessing(itx)  


def t_4():
  """EmailServer submits itx, agent accepts, EmailServer stop processing"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXServer.MediaServerEmail.StopProcessing(itx)  
  

def t_5():
  """EmailServer submits itx, agent does not accept in timeout, not-ready-on-invitation-timeout = false"""
  ITXServer.cfgApp.ChangeOption("settings", "not-ready-on-invitation-timeout", "false")
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.TimeoutReject(itx)
  ITXServer.MediaServerEmail.StopProcessing(itx)  
  
  
def t_6():
  """EmailServer submits itx, agent does not accept in timeout, not-ready-on-invitation-timeout = true"""
  ITXServer.cfgApp.ChangeOption("settings", "not-ready-on-invitation-timeout", "true")
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.TimeoutReject(itx)
  ITXServer.MediaServerEmail.StopProcessing(itx)  
  ITXServer.cfgApp.ChangeOption("settings", "not-ready-on-invitation-timeout", "false")
  
  
def t_7():
  """Agent submits itx, agent places in workbin, pulls, stops processing"""
  itx = ITXAgent1.Submit()
  ITXAgent1.PlaceInWorkbin(itx, GetOption("EmailDrafts"))
  ITXAgent1.Pull(itx)
  ITXAgent1.StopProcessing(itx) 
  

def t_8():
  """Agent requests workbin notifications, cancels workbin notifications"""
  ITXAgent1.WorkbinNotifications(GetOption("EmailDrafts"))
  itx = ITXAgent1.Submit()
  ITXAgent1.PlaceInWorkbin(itx, GetOption("EmailDrafts"))
  ITXAgent1.Pull(itx)
  ITXAgent1.StopProcessing(itx) 
  ITXAgent1.CancelWorkbinNotifications(GetOption("EmailDrafts"))
  itx = ITXAgent1.Submit()
  ITXAgent1.PlaceInWorkbin(itx, GetOption("EmailDrafts"))
  ITXAgent1.Pull(itx)
  ITXAgent1.StopProcessing(itx) 


def t_9():
  """EmailServer submits itx, agent accepts, agent stop processing,
  agent submits reply, agent places in workbin, agent gets workbin content,
  pulls itx and stops processing them"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent1.StopProcessing(itx) 
  itxReply = ITXAgent1.Submit(itxSubType = "OutboundReply", parentItxID = itx.attr_itx_id)
  ITXAgent1.PlaceInWorkbin(itxReply, GetOption("EmailDrafts"))
  itxList = ITXAgent1.GetWorkbinContent(GetOption("EmailDrafts"))
  for itx in itxList:
    ITXAgent1.Pull(itx)
    ITXAgent1.StopProcessing(itx) 



def t_10(): 
  """Transfer to queue"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent1.NotReadyForMedia("email")
  ITXAgent2.CancelNotReadyForMedia("email")
  ITXAgent1.PlaceInQueue(itx, GetOption("EmailInboundQueue"))
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent2)
  ITXAgent2.Accept(itx)
  ITXAgent2.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("email")
  ITXAgent1.CancelNotReadyForMedia("email")
  
  
def t_11(): 
  """Transfer to agent, agent accepts"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("email")
  ITXAgent1.Transfer(itx, ITXAgent2)
  ITXAgent2.Accept(itx)
  ITXAgent2.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("email")

def t_12(): 
  """Transfer to agent, agent does not accept by timeout"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("email")
  ITXAgent1.Transfer(itx, ITXAgent2)
  ITXAgent2.TimeoutReject(itx)
  ITXServer.MediaServerEmail.StopProcessing(itx)  
  ITXAgent2.NotReadyForMedia("email")

def t_13(): 
  """Chat conference with agent, agent accepts"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("chat")  
  ITXAgent1.Conference(itx, ITXAgent2)
  ITXAgent2.Accept(itx)
  ITXAgent2.LeaveInteraction(itx) 
  ITXAgent1.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("chat")
  
def t_14(): 
  """Chat conference with agent, agent does not accept by timeout"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("chat")  
  ITXAgent1.Conference(itx, ITXAgent2)
  ITXAgent2.TimeoutReject(itx)
  ITXAgent1.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("chat")
  
def t_15(): 
  """Conference variations 1"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("chat")  
  ITXAgent1.Conference(itx, ITXAgent2)
  ITXServer.MediaServerChat.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("chat")  
  
def t_16(): 
  """Conference variations 2"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("chat")  
  ITXAgent1.Conference(itx, ITXAgent2)
  ITXAgent2.Accept(itx)
  ITXAgent1.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("chat")    
  
def t_17(): 
  """Conference variations 3"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("chat")  
  ITXAgent1.Conference(itx, ITXAgent2)
  ITXAgent1.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("chat")    
    
def t_18(): 
  """Conference variations 4"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.CancelNotReadyForMedia("chat")  
  ITXAgent1.Conference(itx, ITXAgent2)
  ITXAgent2.Accept(itx)
  ITXAgent1.LeaveInteraction(itx) 
  ITXAgent2.Conference(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.LeaveInteraction(itx) 
  ITXAgent1.StopProcessing(itx) 
  ITXAgent2.NotReadyForMedia("chat")    
  
def t_19(): 
  """Intrusion, agent accepts"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.Intrude(itx)  
  ITXAgent2.Accept(itx)
  ITXAgent2.LeaveInteraction(itx) 
  ITXAgent1.StopProcessing(itx) 

def t_20(): 
  """Intrusion, agent does not accept by timeout"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent2.Intrude(itx)  
  ITXAgent2.TimeoutReject(itx)
  ITXAgent1.StopProcessing(itx) 
  
def t_21(): 
  """Test change properties"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent1.ChangeProperties(itx, addedProp = {"Prop1": "Value1", "Prop2": 2})
  ITXAgent1.StopProcessing(itx) 
  
def t_22():
  """EmailServer submits itx, router places it in workbin, agent gets workbin content,
  pulls itx and stops processing them"""
  ITXAgent1.WorkbinNotifications(GetOption("EmailDrafts"))

  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.PlaceInWorkbin(ITXAgent1, GetOption("EmailDrafts"), itx)
  itxList = ITXAgent1.GetWorkbinContent(GetOption("EmailDrafts"))
  for itx in itxList:
    ITXAgent1.Pull(itx)
    ITXAgent1.StopProcessing(itx) 
  ITXAgent1.CancelWorkbinNotifications(GetOption("EmailDrafts"))

def t_23():
  """EmailServer submits itx, router places in queue"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.PlaceInQueue(itx, GetOption("EmailInboundQueue"))
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  ITXAgent1.StopProcessing(itx) 
  
def t_24():
  """EmailServer submits itx, router stops processing"""
  itx = ITXServer.MediaServerEmail.Submit()
  ITXServer.MultiChannelRouter.StopProcessing(itx)

def t_25(): 
  """Test take snapshot"""
  itx = ITXServer.MediaServerChat.Submit()
  ITXServer.MultiChannelRouter.Deliver(itx, ITXAgent1)
  ITXAgent1.Accept(itx)
  (numberOfInteractions, snapshotID)= ITXAgent1.TakeSnapshot(condition = "id = '%s'" %itx.attr_itx_id)
  ITXAgent1.GetSnapshotInteractions(snapshotID, numberOfInteractions = numberOfInteractions)
  ITXAgent1.StopProcessing(itx)
